04. 判断仓库的状态

在命令行中使用 Git 可能会有点挑战,因为它有点类似于 黑箱 - 维基百科 - 英 | 黑箱理论 - 百度百科 - 中 。如何判断你是否需要运行某些 Git 命令? Git 是否已经准备好运行某个命令? 如果我运行了一个命令,但我认为它并未被执行,我该如何进行验证呢? git status 命令可以回答所有这些问题!

$ git status

git status 是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。当你第一次使用 Git 时,你应该一直都要使用 git status 命令!说真的,你应该习惯于运行任何其他命令之后,都运行下该命令。这样可以帮助你了解 Git 的工作原理,并避免你对文件 / 仓库状态做出不正确的推论。

克隆仓库的状态

回答这道练习题前,确保你已经使用 cd 命令转到 course-git-blog-project 项目中。如果你一直跟着这节课的步骤操作,并且没有向此项目添加任何文件,那么运行 git status 的显示结果是什么?

SOLUTION: On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

git status 输出结果

git status 命令将显示很多信息,具体取决于你的文件状态、工作目录和仓库。但是你不需要过于关心这些内容…只需运行 git status ,它将显示你需要知道的信息。

_终端应用的 GIF 动画。在 `course-git-blog-project` 项目中运行`git status` 命令。_

终端应用的 GIF 动画。在 course-git-blog-project 项目中运行 git status 命令。

git status 说明

正如你在上面的 GIF 中所看到的,在 course-git-blog-project 项目中运行 git status 将产生以下输出结果:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

输出结果告诉了我们两条信息:

  1. On branch master – 这部分告诉我们 Git 位于 master 分支上。你已在术语表中获取了对分支的介绍,那么这是"master"分支(也就是默认分支)。我们将在第 5 节课深入了解分支。
  • Your branch is up-to-date with 'origin/master'. – 因为我们使用 git clone 从另一台计算机上复制了此仓库,因此这部分告诉我们项目是否与所复制的仓库保持同步状态。我们不会在其他计算机上处理该项目,因此这一行可以忽略。

  • nothing to commit, working directory clean – 表示没有任何待定的更改。

可以将这一输出结果看作“休息状态(resting state)”(这并不是官方解释,只是我喜欢这么理解!)。因为没有新的文件、没有对文件作出更改、暂存区没有任何需要 commit 的内容……没有更改或操作,因此我喜欢将其称为休息状态。

这就是在已经具有 commit 的仓库中运行 git status 之后的状态。我们切换到 new-git-project 项目,看看 git status 输出结果是什么。

回答这道练习题前,确保你已经使用 cd 命令转到 new-git-project 项目。

如果你一直跟着这节课的步骤操作,并且没有向此项目添加任何文件,则运行 git status 会显示什么?

SOLUTION: On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)

_终端应用的 GIF 动画。`git status` 命令在 `new-git-project` 项目中运行。_

终端应用的 GIF 动画。 git status 命令在 new-git-project 项目中运行。

💡 Git v2.14 版本的改变 💡

在 Git version 2.14 版本中,在一个空目录中运行 git status 命令的结果中,将 "Inital commit"(初始提交)的用词,改为更清晰明了的 "No commits yet"(尚未有任何提交),所以输出将会是:

On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

新仓库中的 git status 说明

这是在 new-git-project 项目中运行 git status 后的输出结果:

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

澄清一下,我尚未在我的项目中提交任何 commit。如果你提交了 commit,那么你的输出结果应该看起来和 course-git-blog-project 项目中的完全一样。

如果你将此结果与 course-git-blog-project 项目的 git status 输出结果进行对比,你会发现它们很相似。不同之处在于这个输出结果包含 Initial commit 。这有点让人困惑,因为此仓库中尚无任何 commit!我们还未学习如何进行 commit,但是当我们进行学习时,我们将能够提交初始 commit。

想要提前了解下下节课的内容,同时证明此仓库尚无任何 commit?我就知道你想试试!试着运行命令 git log ,并查看其输出结果:

$ git log
fatal: your current branch 'master' does not have any commits yet
      

看起来有点可怕。“Fatal(致命)”?幸运的是,这仅仅意味着 Git 程序正在退出,因为它没有任何需要完成的任务。Git 将此情况视为错误,但这并不是一个问题。因为我们知道自己尚未在此仓库中提交任何 commit。

从输出结果可以清晰地看出没有任何 commit!

我们刚刚简单地了解了 git status 命令。 git status 的输出结果将有所不同,具体取决于文件是否被添加/删除/修改、暂存索引的情况,以及仓库的状态。我们将在整个课程中持续使用 git status 命令,因此请熟练掌握该命令!

git status 小结

git status 命令将显示仓库的当前状态。

$ git status

我一直在强调这个命令非常的重要,因为这是你第一次使用 Git。该命令将: